<!DOCTYPE html>
<html lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<!--bootstrap插件-->
	<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
	<link href="/static/plugin/bootstrap/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet"/>
	<link href="/static/plugin/jo/joUI.css" rel="stylesheet"/>
	<!--字体插件-->
	<link href="/static/plugin/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
	<link href="/static/plugin/layui-2.4.3/css/layui.css" rel="stylesheet"/>
	<!--ztree-->
	<link href="/static/plugin/zTree/css/metroStyle/metroStyle.css" rel="stylesheet"/>
	<!--common-->
	<link href="/static/css/common.css" rel="stylesheet"/>
	<!--帮助手册样式-->
	<link rel="stylesheet" type="text/css" href="/static/css/help/document.css">
	<!--代码高亮-->
	<link type="text/css" rel="stylesheet" href="/static/plugin/SyntaxHighlighter/styles/shCore.css"/>
	<link type="text/css" rel="stylesheet" href="/static/plugin/SyntaxHighlighter/styles/shCoreDefault.css"/>
	<link type="text/css" rel="stylesheet" href="/static/plugin/SyntaxHighlighter/styles/shThemeDefault.css"/>
	<title>无标题文档</title>

</head>

<body style="padding:5px 10px; box-sizing:border-box; background-color:white;">
<a href="#" target="_blank" class="showAtTop">显示单页</a>
<table class="docTable">
	<tr class="docTitle">
		<td colspan="2">
			<i class="fa fa-caret-down"> </i>jo&nbsp;&nbsp;&nbsp;&nbsp;jo
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<p>基于jQuery的工具集！</p>
		</td>
	</tr>
</table>

<table class="docTable">
	<tr class="docTitle">
		<td colspan="2"><i class="fa fa-caret-down"> </i>属性</td>
	</tr>
	<tr>
		<td><attr><obj/>jo.Const</attr></td>
		<td>jo常量集合</td>
	</tr>
	<tr>
		<td><attr><obj/>jo.params</attr></td>
		<td>存放页面有关的参数</td>
	</tr>
	<tr>
		<td><attr><obj/>jo.address</attr></td>
		<td>
			域名解析配置，<func>jo.parseUrl(sUrl)</func>在解析地址的时候会从该属性中匹配例如:<br/><code>jo.address = {<br/>
				"contextPath" : "/rookie",<br/>
				"bamPath" : "http://bam.rookie.com:8088/rookie",<br/>
				"umsPath" : "http://ums.rookie.com:8088/rookie"<br/>
			};</code>
		</td>
	</tr>
	<tr>
		<td><attr><boolean/>jo.bIE</attr></td>
		<td>判断浏览器是否是IE</td>
	</tr>
	<tr>
		<td><attr><string/>jo.IEVersion</attr></td>
		<td>IE浏览器版本</td>
	</tr>
	<tr>
		<td><attr><string/>jo.bIE6</attr></td>
		<td>是否是IE6</td>
	</tr>
	<tr>
		<td><attr><boolean/>jo.bEdge</attr></td>
		<td>是否是Edge</td>
	</tr>
	
	<tr>
		<td><attr><boolean/>jo.bChrome</attr></td>
		<td>是否是Chrome</td>
	</tr>
	<tr>
		<td><attr><boolean/>jo.bFireFox</attr></td>
		<td>是否是FireFox</td>
	</tr>
	<tr>
		<td><attr><boolean/>jo.bOpera</attr></td>
		<td>是否是Opera</td>
	</tr>
</table>

<table class="docTable">
	<tr class="docTitle">
		<td colspan="2">
			<i class="fa fa-caret-down"> </i>方法
		</td>
	</tr>
	<tr>
		<td><func><boolean/>jo.isValid(val)</func></td>
		<td>判断val是否有效(即:<code>!=null,!='null',!='NULL',!='',!='undefined'</code>)</td>
	</tr>
	<tr>
		<td><func><string/>jo.getDefVal(val,def)</func></td>
		<td>获取默认值,val有效返回val,否则返回def(def无效返回"")<br/>当val是数字0时返回0<br/>当val为布尔型false时返回false</td>
	</tr>
	
	<tr>
		<td><func><string/>jo.getUUID()</func></td>
		<td>获取jo策略的UUID<br/>长度为32位,由当前时间戳与数字/字母组合而成</td>
	</tr>
	<tr>
		<td><func><obj/>jo._(sSelector)</func></td>
		<td>获取jQuery对象,也可以是<code>jo_(sSelector)</code><br/>参数为jQuery格式的选择器</td>
	</tr>
	<tr>
		<td><func><int/>jo.getSizeNum(sPX)</func></td>
		<td>获取尺寸数字<br/>例如:输入5px,输出5</td>
	</tr>
	<tr>
		<td><func><string/>jo.parseUrl(sUrl)</func></td>
		<td>解析URL>,从<attr>jo.address</attr>中匹配url中携带的参数信息
		例如:输入<code>{umsPath}/ums/getXX.action</code>
		,输出http://www.rookie.com/rookie/ums/getXX.action</td>
	</tr>
	<tr>
		<td><func><obj/>jo.post(sUrl,oData)</func></td>
		<td>post类型的请求<br/>实现方式: 虚拟表单</td>
	</tr>
	<tr>
		<td><func><string/>jo.obj2JsonStr(obj)</func></td>
		<td>对象转为json字符串</td>
	</tr>
	<tr>
		<td><func><string/>jo.xmlDocument2Json(xmlDoc)</func></td>
		<td>xml文档（字符串）转对象</td>
	</tr>
	<tr>
		<td><func><obj/>jo.postAjax(sUrl,sData,callback,isAsync)</func></td>
		<td>post类型的ajax请求
		<br/>参数1：请求地址，可以使用带参形式，例如<code>{contextPath}/test/test.action</code>，
		在请求前会通过<func>jo.parseUrl(sUrl)</func>将{contextPath}解析为对应地址，地址映射需要在
		<attr>jo.address</attr>配置
		<br/>参数2：请求参数，可以是<string/>，例如<code>id=123&name=rookie</code>，
		也可以是<obj/>，例如<code>{id:'123',name:'rookie'}</code>
		<br/>参数3：回调函数，回调的参数为ajax请求返回的结果<br/>参数4：是否异步加载，默认<code>false</code>
		<br/>数据提交类型: <code>application/x-www-form-urlencoded</code>,所以如果有文件需要上传不可以使用该方法
		<br/>ajax返回值类型：<code><strong>json</strong></code></td>
	</tr>
	<tr>
		<td><func><void/>jo.loadJS(sUrl)</func></td>
		<td>动态加载JavaScript,参数sUrl为js地址</td>
	</tr>
	<tr>
		<td><func><void/>jo.loadCSS(sUrl)</func></td>
		<td>加载css,参数sUrl为css地址</td>
	</tr>
	<tr>
		<td><func><void/>jo.postJSONP(sUrl,callback)</func></td>
		<td>JSONP跨域请求</td>
	</tr>
	<tr>
		<td><func><string/>jo.getUrlParam(sKey)</func></td>
		<td>获取地址栏参数</td>
	</tr>
	<tr>
		<td><func><obj/>jo.getUrlParams(sUrl)</func></td>
		<td>返回地址栏所有参数，参数可以没有，默认为当前页面的url</td>
	</tr>
	<tr>
		<td><func><void/>jo.showMsg(msg)</func></td>
		<td>页面弹出提示信息，效果为淡入淡出，点击消失，<a href="javascript:jo.showMsg('欢迎使用本文档！')">点我试试手</a></td>
	</tr>
	<tr>
		<td><func><obj/>jo.form2Json(oFormOrFormId)</func></td>
		<td>将表单数据转为json对象<br/>参数为表单id或者表单jq对象</td>
	</tr>
	<tr>
		<td><func><string/>jo.form2JsonStr(oFormOrFormId)</func></td>
		<td>将表单数据转为json字符串</td>
	</tr>
	<tr>
		<td><func><string/>jo.form2ParamStr(oFormOrFormId)</func></td>
		<td>将表单数据转为key1=value1&key2=value2..形式</td>
	</tr>
	<tr>
		<td><func><void/>jo.reset(id)</func></td>
		<td>重置表单,传入表单id</td>
	</tr>
	<tr>
		<td><func><void/>jo.checkAll(name,obj)</func></td>
		<td>全选/取消全选,参数为复选框的name属性(默认是'ID'),obj表示全选框对象，为空是默认id为checkAll的多选框；推荐obj参数传this</td>
	</tr>
	<tr>
		<td><func><string/>jo.getCheckBoxValue(boxName)</func></td>
		<td>得到所有选中复选框的值:参数为checkbox的name;返回以逗号间隔的字符串<br/>对radio也有效</td>
	</tr>
	<tr>
		<td><func><string/>jo.getLinkSign(sUrl)</func></td>
		<td>根据传入的url判断追加参数时使用的字符，返回&或?</td>
	</tr>
	<tr>
		<td><func><string/>jo.formatDate(msOrDate)</func></td>
		<td>格式化日期：参数为毫秒数或者<date/>类型<br/>返回格式：yyyy-MM-dd</td>
	</tr>
	<tr>
		<td><func><string/>jo.formatTime(msOrDate)</func></td>
		<td>格式化时间：参数为毫秒数或者<date/>类型<br/>返回格式：yyyy-MM-dd hh:mm:ss</td>
	</tr>
	<tr>
		<td><func><obj/>jo.execCode(sCode, paramArr)</func></td>
		<td>执行代码,参数1:代码表达式string<br/>参数2:表达式中的常量(类似于{URL_UMS}格式)映射,object类型</td>
	</tr>
	<tr>
		<td><func><obj/>jo.getCode(sCode, paramArr)</func></td>
		<td>解析代码,参数1:代码表达式string<br/>参数2:表达式中的常量(类似于{URL_UMS}格式)映射,object类型</td>
	</tr>
	<tr>
		<td><func><void/>jo.initBtnAuth()</func></td>
		<td>初始化按钮权限，对满足<code>$("#joBtn[isShow]")</code>的元素的display属性进行初始化<br/>
		当元素属性isShow内的表达式为false时,该元素隐藏</td>
	</tr>

	<tr>
		<td><func><void/>jo.remove(element)</func></td>
		<td>移除某元素，参数为js元素，不是jq</td>
	</tr>
	<tr>
		<td><func><void/>jo.iframeLoaded(iframe, func)</func></td>
		<td>iframe加载完成事件</td>
	</tr>
	<tr>
		<td><func><obj/>jo.getShade(zIndex)</func></td>
		<td>生成遮罩层,返回遮罩层元素，参数为元素z-index属性，可以为空
		<a href="javascript:;" onclick="jo.getShade();">点我试试手（友情提示：无法关闭）</a></td>
	</tr>
	<tr>
		<td><func><boolean/>jo.checkForm(oForm)</func></td>
		<td>表单验证,参数为表单jQuery对象<br/>
		<code>&lt;input/></code>标签相关属性:<br/>
		 1.<attr>ErrEmpty</attr> 非空提示,含有此属性说明该项为必填项,属性值为提示信息;<br/>
		 2.<attr>ErrLength</attr> 长度验证,值为该项允许的最大长度;<br/>
		 3.<attr>ErrInfo</attr> 错误提示,发生验证错误时的提示信息;<br/>
		 4.<attr>ErrReg</attr> 验证的正则表达式,可以自定义<br/>
		 5.<attr>ErrMail</attr> 邮箱验证<br/>
		 6.<attr>ErrPhone</attr> 手机号验证
		</td>
	</tr>
	<tr>
		<td><func><void/>jo.sort(arr, func)</func></td>
		<td>数组排序,基于冒泡排序算法<br/>参数1：待排序数组<br/>参数2：比较器函数（类似于java中Comparator），函数有2参数,返回元素a和b的比较结果,返回true表示元素a在b前</td>
	</tr>
	<tr>
		<td><func><Object/>jo.parseKey(oObj, sKey)</func></td>
		<td>智能解析key,和execCode类似（增强版）
			<br/>1.key可以是普通字符串,例如name,返回oObj对象的name属性
			<br/>2.key可以是多属性拼接表达式,例如{id}({name}),传入该值返回的是{id}和{name}分别被id和name属性替换后的值==> id的值(name的值)
			<br/>3.key可以是有返回值的方法表达式,例如:[=format({time})],返回的是time属性传入format方法后返回的值
		</td>
	</tr>
	<tr>
		<td><func><void/>jo.readonly2Label(formId)</func></td>
		<td>将只读属性的表单元素转为文本</td>
	</tr>
	<tr>
		<td><func><void/>jo.form2Label(formId)</func></td>
		<td>表单元素转文本</td>
	</tr>
	<tr>
		<td><func><void/>jo.formatUI()</func></td>
		<td>jo组件统一格式化ui入口,组件默认采用同步方式进行格式化,避免因为异步带来的渲染顺序问题</td>
	</tr>
</table>

<table class="docTable">
	<tr class="docTitle">
		<td colspan="2">
			<i class="fa fa-caret-down"> </i>过时的方法
		</td>
	</tr>
	<tr>
		<td><func><void/>jo.showDialog(dialogElement,sWinName,hasShade)</func></td>
		<td>弹出对话窗dialog，插入的是html节点元素对象或者代码，<err>存在bug未修复,慎用</err>
		<a href="javascript:;" onclick="jo.showDialog(document.getElementsByClassName('docTable')[1]);">试试手</a></td>
	</tr>
	<tr>
		<td><func><void/>jo.showWin(sUrl,sWidth,sHeight,sTitle,sWinName,isFull,hasShade)</func></td>
		<td>弹出窗口,插入的是url，产生了新的window
		<a href="javascript:;" onclick="jo.showWin('http://www.baidu.com');">试试手</a></td>
	</tr>
	<tr>
		<td><func><void/>jo.showDialogWin(dialogElement,sTitle,sWinName,hasShade)</func></td>
		<td>弹出对话窗口,插入的是元素，<err>存在bug未修复,慎用</err>
		<a href="javascript:;" onclick="jo.showDialogWin(document.getElementsByClassName('docTable')[1]);">试试手</a></td>
	</tr>
	<tr>
		<td><func><void/>jo.selectList(sUrl,inpId,inpName,fieldId,fieldName,multiple,callback)</func></td>
		<td>弹出选择列表窗口，<err>页面在rookie项目中,暂时无法显示</err>
		<a href="javascript:;" onclick="jo.selectList('../demoData/userList.js');">试试手_选择省市</a></td>
	</tr>
	
	<tr>
		<td><func><void/>jo.timeDown(sTime,callBack)</func></td>
		<td>按秒倒计时，倒计时10秒示例：
		<a href="javascript:;" onclick="jo.timeDown('00:00:10',function(res){jo.showMsg(res)})">点击开始</a>
		<br><code>jo.timeDown(“00:00:10”,function(res){jo.showMsg(res)})</code>：
		<br/><iFunc>joTimeDownOver()</ifunc>倒计时结束后回调</td>
	</tr>
	<tr>
		<td><func><void/>jo.setMove(element)</func></td>
		<td>给某元素设置拖拽特性，使用此方法后，可以拖拽对应元素，注：参数不是jq对象</td>
	</tr>
	<tr>
		<td><func><void/>jo.setMoveByKey(element,bFlag)</func></td>
		<td>元素设置箭头控制移动，使用此方法后可以通过上下左右箭头控制元素移动，注：参数1不是jq对象
		<br/>参数2表示设置属性后是否立马生效，默认不立即生效，点击元素可以触发生效或失效</td>
	</tr>
	
</table>

<!--配置信息-->
<script src="/static/js/config.js"></script>
<!--jquery-->
<script src="/static/plugin/jquery/jquery-3.3.1.js"></script>
<script src="/static/plugin/jquery/jquery.cookie.js"></script>
<!--bootstrap-->
<script src="/static/plugin/bootstrap/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
<!--[if lt IE 9]>
<script src="/static/plugin/other/html5shiv.js"></script>
<script src="/static/plugin/other/respond.min.js"></script>
<![endif]-->
<!--layui-->
<script src="/static/plugin/layui-2.4.3/layui.all.js"></script>
<!--ztree-->
<script src="/static/plugin/zTree/js/jquery.ztree.all.js"></script>
<!--jo-->
<script src="/static/plugin/jo/jo.js"></script>
<script src="/static/plugin/jo/jo-adapt.js"></script>
<script src="/static/plugin/jo/jo-page-view.js"></script>
<script src="/static/plugin/jo/jo-page-form.js"></script>
<script src="/static/plugin/jo/jo-listener.js"></script>
<!--common-->
<script src="/static/js/common.js"></script>
<!--帮助手册js-->
<script src="/static/js/help/document.js"></script>
<!--代码高亮-->
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shCore.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushCSharp.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushPhp.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushJScript.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushJava.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushVb.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushSql.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushXml.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushDelphi.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushPython.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushRuby.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushCss.js"></script>
<script class="javascript" src="/static/plugin/SyntaxHighlighter/scripts/shBrushCpp.js"></script>
<script class="javascript">
	highLight();
	function printSomething(){
		var funcArr = [];//函数数组
		var attrArr = [];//属性数组
		for(var k in jo){
			var item = jo[k];
			if(typeof (item) == 'function'){
				funcArr.push(k);
			}else{
				attrArr.push({name:k, type:typeof item});
			}
		}
		var str = '';
		for(var i=0;i<funcArr.length;i++){
			var item = funcArr[i];
			str += '<tr><td><func><boolean/>jo.isValid(val)</func></td><td>xxx</td></tr>'

		}
	}
</script>
</body>
</html>
